// pages/raffleticket/raffleticket.js
import { get, add, count } from "../../utils/db"
Page({
  data: {
    zpData: {
      //转盘主图图片url
      zpImg: '../../images/zp.png',
      equalParts: 6, //一共多少等份
      oneAngle: 60, //每一等份多少度

      // ******** 转盘奖品数据：后台获取数据 ********
      //注：根据转盘图片对应的值（转盘图片指针处顺时针向右数，起始1，奖品对应的格子数【第几等份上】）
      awardSetting: [
        'HUAWEI MateBook',
        'HUAWEI Mate20',
        'JAF1 雷达测速仪',
        'MI 净水器',
        '警安采购优惠券',
        '谢谢惠顾',
      ],
    },
    ifRoate: false, //转盘是否在转动（判断阻止多次点击）
    zpRotateDeg: '', //旋转角度

    // ******** 抽奖结果数据：后台获取数据 ********
    curKey: null, //抽奖结果 ： 取值范围 1 至 总格子数
    ifWinning: null, //是否中奖
  },
  // 获取转盘初始数据
  getZpData() {
    let zpImg = 'zpData.zpImg';
    let awardSetting = 'zpData.awardSetting';
    this.setData({
      [zpImg]: '../../../images/zp.png',
      [awardSetting]: [
        '1',
        '2',
        '3',
        '4',
        '5',
        '6',
      ],
    });

    this.setZpDefault();
  },
  // 根据转盘初始数据设置转盘初始关键参数
  setZpDefault() {
    let equalPartsNum = this.data.zpData.awardSetting.length;
    let oneAngleNum = 360 / equalPartsNum;
    let equalParts = 'zpData.equalParts';
    let oneAngle = 'zpData.oneAngle';
    this.setData({
      //一共多少等份
      [equalParts]: equalPartsNum,
      // 根据转盘得等份数设置 每一等份多少度
      [oneAngle]: oneAngleNum,
    });
  },


  // 设置旋转动效
  setToRotate(degNum) {
    this.setData({
      zpRotateDeg: '-webkit-transform: rotate(' + degNum + 'deg);transform: rotate(' + degNum + 'deg);-webkit-transition: all 5s ease;transition: all 5s ease;',
    });
  },
  //根据 设置的 指针停止时指向的格子（中奖结果），设置其旋转角度区间
  setRotate(awardSettingNumber) { //awardSettingNumber  取值范围 1 至 总格子数
    setTimeout(() => {
      //转盘停止时 指针 指向的格子 最小角度
      let minAngle = 360 - awardSettingNumber * this.data.zpData.oneAngle + 5;
      //转盘停止时 指针 指向的格子 最大角度
      let maxAngle = 360 - (awardSettingNumber - 1) * this.data.zpData.oneAngle - 5;
      //旋转区间
      let newAngle = Math.floor(minAngle + Math.random() * (maxAngle - minAngle)) + 360 * 10;

      this.setToRotate(newAngle);

      setTimeout(() => {
        this.roateEnd(awardSettingNumber);
      }, 5150);
    }, 50);
  },
  //旋转结束执行
  roateEnd(awardSettingNumber) {
    console.log('奖品ID -- ' + awardSettingNumber, this.data.curKey);
    console.log('奖品内容 -- ' + this.data.zpData.awardSetting[awardSettingNumber - 1], this.data.zpData.awardSetting[this.data.curKey - 1]);

    // 是否中奖
    if (this.data.ifWinning) {
      //如果中奖，中奖信息存储数据库
      let { realname, avatarUrl, phone } = wx.getStorageSync('userInfo')
      let content = this.data.zpData.awardSetting[this.data.curKey - 1];   //奖品名称
      //在logs集合中添加记录
      add({
        collection: "logs", data: {
          realname,
          avatarUrl,
          phone,
          award: content,
          _createTime:new Date().getTime()
          
        }
      })
      //提示用户中奖
      setTimeout(() => {
        wx.showModal({
          title: "恭喜中奖",
          content,
          success: res=>{
            // console.log(res)
            if(res.confirm){
              wx.reLaunch({
                url: '/pages/logs/logs',
              })
            }
          }
        })

      }, 1500);


    } else {
      wx.showModal({
        cancelColor: 'cancelColor',
        title: "温馨提示",
        content: "您没有中奖"
      })
    }

    setTimeout(() => {
      this.setData({
        ifRoate: false, //转盘是否在转动
      });
    }, 100);
  },


  //点击抽奖
  async getLucky() {
    //如果用户已经抽过奖，则不允许抽奖
    let { openid } = wx.getStorageSync("userInfo");
    let logResult = await count({ collection: "logs", where: { _openid: openid } }).catch(err => {
      console.error(err)
    })
    if (logResult.total > 0) {
      wx.showModal({
        title: "温馨提示",
        content: "您已经参与过抽奖",
        success: res => {
          wx.reLaunch({
            url: "/pages/logs/logs"
          })
        }
      })
      return;
    }


    if (this.data.ifRoate) {
      return false;
    }

    this.setData({
      ifRoate: true, //转盘是否在转动
      zpRotateDeg: ''
    });

    // 请求后台获取数据结果：奖品
    let result = await get({ collection: "award" }).catch(err => {
      console.error(err)
    })

    result = result.data.map(item => item.name)
    this.setData({
      ['zpData.awardSetting']: result
    })

    //抽奖结果 ： 取值范围 1 至 总格子
    let curKey = Math.floor(1 + Math.random() * this.data.zpData.equalParts)

    if (curKey != 5) {
      var res = {
        status: 1,
        curKey,
        ifWinning: true, //是否中奖
        info: '一等奖'
      }
    } else {
      var res = {
        status: 0,
        curKey,
        ifWinning: false, //是否中奖
        info: '没有中奖'
      }
    }
    // 对数据进行判断 
    if (res.status == 1) {
      this.setData({
        curKey: res.curKey,
        ifWinning: res.ifWinning
      });

      this.setRotate(this.data.curKey);
    } else {

      this.setData({
        ifRoate: false, //转盘是否在转动I
        curKey: 4,
        ifWinning: res.ifWinning
      });
      this.setRotate(this.data.curKey);
    }
  },
})